Fast Mobile Web Applications Using Cloud Caching

ABSTRACT

Methods and systems may provide for identifying a web application having a primary resource that references a secondary resource, wherein the primary resource contains a version identifier of the primary resource and a version identifier of the secondary resource. Additionally, a cached version of the primary resource and a cached version of the secondary resource may be created on a mobile device, and the version identifier of the primary resource may be used to determine whether the secondary resource is stale. In one example, it may be determined that staleness checking has been disabled in the secondary resource. Moreover, if the primary resource does not contain the version identifiers, cloud caching may be used.

BACKGROUND

Embodiments of the present invention generally relate to the management of web applications. More particularly, embodiments relate to the use of cloud caching and/or simplified client-side staleness checking to manage web applications on mobile devices.

Many web applications that are made available through mobile application stores (e.g., IPHONE application stores, ANDROID application stores, etc.) may contain the same functionality of a web page. Thus, the web application may serve little other purpose than that of a bookmark that links to a set of resources over a network. In such a case, the process of accessing the web application may be relatively slow due to intermittent and/or no Internet access. While more recent technology such as HTML5 (Hypertext Markup Language 5) offline manifest access may address certain concerns regarding the usability of web applications, there remains considerable room for improvement.

BRIEF SUMMARY

Embodiments may include a computer implemented method that involves identifying a web application having a primary resource that references a secondary resource and creating a shell resource that contains a version identifier of the primary resource and a version identifier of the secondary resource. The method may also provide for creating a cached version of the shell resource and a cached version of the secondary resource on a cloud server and creating a manifest for the web application. In addition, one or more of the version identifier of the primary resource and the version identifier of the secondary resource may be used to conduct a staleness check of the web application, wherein one or more of the primary resource and the secondary resource may be updated based on the staleness check.

Embodiments may include a computer program product having a computer readable storage medium and computer usable code stored on the computer readable storage medium. If executed by a processor, the computer usable code may cause a cloud server to identify a web application having a primary resource that references a secondary resource and create a shell resource that contains a version identifier of the primary resource and a version identifier of the secondary resource. The computer usable code may also cause a cloud server to create a cached version of the shell resource and a cached version of the secondary resource on the cloud server and create a cache manifest for the web application. Additionally, the computer usable code may cause a cloud server to use one or more of the version identifier of the primary resource and the version identifier of the secondary resource to conduct a staleness check of the web application and update one or more of the cached version of the shell resource and the cached version of the secondary resource based on the staleness check. In addition, the computer usable code may cause a cloud server to update the cache manifest based on the staleness check.

Embodiments may also include a computer program product having a computer readable storage medium and computer usable code stored on the computer readable storage medium. If executed by a processor, the computer usable code may cause a mobile device to identify a web application having a primary resource that references a secondary resource, wherein the primary resource contains a version identifier of the primary resource and a version identifier of the secondary resource. The computer usable code may also cause a mobile device to create a cached version of the primary resource and a cached version of the secondary resource on the mobile device and use the version identifier of the primary resource to determine whether the secondary resource is stale.

BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS

The various advantages of the embodiments of the present invention will become apparent to one skilled in the art by reading the following specification and appended claims, and by referencing the following drawings, in which:

FIG. 1 is a block diagram of an example of a web application according to an embodiment;

FIG. 2 is a flowchart of an example of a method of managing web applications on a mobile device according to an embodiment;

FIGS. 3A and 3B are flowcharts of examples of methods of processing load requests on mobile devices according to embodiments;

FIG. 4 is a flowchart of an example of a method of managing web applications on a cloud server according to an embodiment;

FIG. 5 is a block diagram of an example of a web application conversion according to an embodiment; and

FIG. 6 is a block diagram of an example of a networking architecture according to an embodiment.

DETAILED DESCRIPTION

As will be appreciated by one skilled in the art, aspects of the present invention may be embodied as a system, method or computer program product. Accordingly, aspects of the present invention may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, etc.) or an embodiment combining software and hardware aspects that may all generally be referred to herein as a “circuit,” “module” or “system.” Furthermore, aspects of the present invention may take the form of a computer program product embodied in one or more computer readable medium(s) having computer readable program code embodied thereon.

Any combination of one or more computer readable medium(s) may be utilized. The computer readable medium may be a computer readable signal medium or a computer readable storage medium. A computer readable storage medium may be, for example, but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. More specific examples (a non-exhaustive list) of the computer readable storage medium would include the following: an electrical connection having one or more wires, a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing. In the context of this document, a computer readable storage medium may be any tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device.

A computer readable signal medium may include a propagated data signal with computer readable program code embodied therein, for example, in baseband or as part of a carrier wave. Such a propagated signal may take any of a variety of forms, including, but not limited to, electro-magnetic, optical, or any suitable combination thereof. A computer readable signal medium may be any computer readable medium that is not a computer readable storage medium and that can communicate, propagate, or transport a program for use by or in connection with an instruction execution system, apparatus, or device.

Program code embodied on a computer readable medium may be transmitted using any appropriate medium, including but not limited to wireless, wireline, optical fiber cable, RF, etc., or any suitable combination of the foregoing.

Computer program code for carrying out operations for aspects of the present invention may be written in any combination of one or more programming languages, including an object oriented programming language such as Java, Smalltalk, C++ or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The program code may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider).

Aspects of the present invention are described below with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems) and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.

These computer program instructions may also be stored in a computer readable medium that can direct a computer, other programmable data processing apparatus, or other devices to function in a particular manner, such that the instructions stored in the computer readable medium produce an article of manufacture including instructions which implement the function/act specified in the flowchart and/or block diagram block or blocks.

The computer program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatus or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.

Client-Side Staleness Checking

Referring now to FIG. 1, a web application 10 is shown, wherein the web application 10 has a primary (e.g., parent, master) resource 12 that references one or more secondary (e.g., child) resources 14 (14 a-14 c). The web application 10 may generally provide a wide variety of functions such as, for example, loan calculations, currency conversions, animation, etc., to client devices such as, smart tablets, wireless smart phones and other mobile devices. The primary resource 12 might function as a top level bookmark (e.g., “app.html”) that links to a JAVASCRIPT secondary resource 14 a (e.g., “controller.js”), a style sheet secondary resource 14 b (e.g., “style.css”), an image secondary resource 14 c (e.g., “image.png”), and so forth, wherein the secondary resources 14 enable the overall functionality of the web application 10.

In the illustrated example, the primary resource 12 contains a version identifier 16 (“Ver_(pr)”) of the primary resource 12 and version identifiers 18 (18 a-18 c) of the secondary resources 14. For example, a first version identifier 18 a (“Ver_(sr1)”) may correspond to the JAVASCRIPT secondary resource 14 a, a second version identifier 18 b (“Ver_(sr2)”) may correspond to the style sheet secondary resource 14 b, a third version identifier 18 c (“Ver_(sr3)”) may correspond to the image secondary resource 14 c, and so forth. The version identifier 16 may generally indicate the current version level of the primary resource 12 and the version identifiers 18 may generally indicate the current version level of the respective secondary resources 14. Table I below shows one of example of such a web application 10 configuration.

TABLE I App Version Version 1 Version 2 Version 3 app.html <!DOCTYPE HTML <!DOCTYPE HTML <!DOCTYPE HTML contents PUBLIC ″-//W3C//DTD PUBLIC ″-//W3C//DTD PUBLIC ″-//W3C//DTD HTML 4.01 HTML 4.01 HTML 4.01 Transitional//EN″> Transitional//EN″> Transitional//EN″> <html> <html> <html> <head> <head> <head> <title>Version 1</title> <title>Version 2</title> <title>Version 3</title> <meta http- <meta http- <meta http- equiv=″Content-Type″ equiv=″Content-Type″ equiv=″Content-Type″ content=″text/html; content=″text/html; content=″text/html; charset=UTF-8″> charset=UTF-8″> charset=UTF-8″> <script <script <script type=″text/javascript″ type=″text/javascript″ type=″text/javascript″ src=″controller.js?versio src=″controller.js?versio src=″controller.js?versio n=1.1″ /> n=1.1″ /> n=2.0″ /> <style type=″text/css″ <style type=″text/css″ <style type=″text/css″ src=″view.css?version=2. src=″view.css?version=2. src=″view.css?version=3. 3″ /> 3″ /> 0″ /> </head> </head> </head> <body> <body> <body>  <h1>Version  <h1>Version  <h1>Version 1</h1> 2</h1> 3</h1>  <img alt=″Image  <img alt=″Image  <img alt=″Image Resource″ Resource″ Resource″ src=″image.png?version src=″image.png?version src=″image.png?version =1.0″ /> =1.1″ /> =1.1″ /> </body> </body> </body> </html> </html> </html> Secondary controller.js = 1.1 controller.js = 1.1 controller.js = 2.0 resource view.css = 2.3 view.css = 2.3 view.css = 3.0 Version image.png = 1.0 image.png = 1.1 image.png = 1.1 (bolded is updated)

Thus, if the version identifier 16 of the primary resource 12 is “Version 1” as in the leftmost example of Table I, the first version identifier 18 a of the JAVASCRIPT secondary resource 14 a would be “controller.js?version=1.1”, the second version identifier 18 b of the style sheet secondary resource 14 b would be “view.css?version=2.3”, and the third version identifier 18 c of the image secondary resource 14 c would be “image.png?version=1.0”, in the example shown. Similarly, if the version identifier 16 of the primary resource 12 is “Version 2” as in the middle example of Table I, the first version identifier 18 a of the JAVASCRIPT secondary resource 14 a would be “controller.js?version=1.1”, the second version identifier 18 b of the style sheet secondary resource 14 b would be “view.css?version=2.3”, and the third version identifier 18 c of the image secondary resource 14 c would be “image.png?version=1.1”. Accordingly, if it is determined that the primary resource 12 is at Version 2 but a client device has cached an older version of the image secondary resource 14 c (e.g., version 1.0 instead of version 1.1), an update to the cached version of the image secondary resource 14 c may be conducted. Similar determinations and updates may be made for the rightmost example of Table I and subsequent versions.

Of particular note is that staleness checking has been disabled in the illustrated secondary resources 14. One approach to disabling staleness checking may be to set a max-age header of each secondary resources 14 to a value that is so high (e.g., five years) that a staleness check will never be triggered by the secondary resources 14 themselves. As will be discussed in greater detail, disabling staleness checking in the secondary resources 14 and incorporating the version identifiers 16, 18 into the primary resource 12 may enable simplified client-side staleness checking, enhanced performance and longer battery life.

For example, FIG. 2 shows a method 20 of managing web applications on a mobile device in which illustrated processing block 22 provides for identifying a web application having a primary resource that references one or more secondary resources and contains a version identifier of the primary resource and a version identifier of the one or more secondary resources. A cached version of the primary resource and a cached version of the one or more secondary resources may be created at block 24 on a mobile device. Creation of the cached versions of the resources may be conducted, for example, when a user of the mobile device views the web application.

Of particular note is that block 24 may create a cached version of all of the secondary resources even if one or more of them is not accessed when the user views the web application. Thus, for example, if even if the user does not view the help page (e.g., help.html) of a web application on a first visit to the web application, that page may be cached on the mobile device at block 24. In this regard, a cache manifest, a preload procedure and/or a hidden iframe may be used to create the cached version of the secondary resources. More particularly, a cache manifest (e.g., linked file) as shown below might be used to describe all resources of the web application.

Cache Manifest

<Other Resources that Make Up the Web Application>

help.html

Additionally, a JAVASCRIPT Extensible Markup Language (XML) Hypertext Transfer Protocol (HTTP) Request (XHR) may be used as a preload procedure to obtain each of the secondary resources of the web application. Such an XHR may be used to send HTTP or HTTPS requests to the web server(s) hosting the web application. In another example, the mobile device may link to the secondary resources via a hidden iframe. In either the preload procedure or hidden iframe example, the name of the resource may include the appropriate version identifier and the HTTP headers may be set to ensure that a staleness check will not be triggered for the resource.

Block 26 may provide for using the version identifier of the primary resource to determine whether the one or more secondary resources are stale. As will be discussed in greater detail, using the version identifier of the primary resource to conduct the staleness determination rather than relying on the staleness checking of each secondary resource may enable network accesses to be minimized. Minimizing network accesses/connections may in turn enhance performance and extend battery life.

For example, FIG. 3A shows a method 30 of processing load requests on a mobile device in which block 32 may receive a load request from the mobile device with respect to a web application having a primary resource that references one or more secondary resources. The load request may be associated with a user request to open and/or view the web application (e.g., via selection of an application icon), a timer-based (e.g., scheduled) invocation of the web application, a sensor-triggered invocation of the web application, and so forth. Illustrated block 34 generates a staleness request in response to the load request based on the version identifier of the primary resource. Thus, block 34 might involve determining the version identifier 16 (FIG. 1) of the currently cached version of the primary resource on the mobile device, incorporating that version identifier into the staleness request and transmitting the staleness request to a remote server.

A response to the staleness request may be received at block 36, wherein illustrated block 38 determines whether the primary resource and/or secondary resources are stale based on the response. Thus, if the mobile device has cached “Version 1” of the primary resource in the above example of Table I and the response to the staleness request indicates that the most recent level of the primary resource is “Version 2”, block 38 may automatically determine that the “image.png” secondary resource is stale (i.e., is currently cached at version 1.0 instead of version 1.1). Similarly, if the mobile device has cached “Version 2” of the primary resource in the above example of Table I and the response to the staleness request indicates that the most recent level of the primary resource is “Version 3”, block 38 may automatically determine that the “controller.js” and “view.css” secondary resources are stale (i.e., controller.js is currently cached at version 1.1 instead of version 2.0 and view.css is currently cached at version 2.3 instead of version 3.0). If it is determined at block 38 that one or more of the resources are stale, illustrated block 40 updates the stale resources. Otherwise, not update is conducted.

Of particular note is that the staleness of all secondary resources may be determined solely based on the version identifier of the primary resource in the illustrated example. Moreover, disabling staleness checking in the individual secondary resources and transmitting the staleness request over a single connection that enables staleness verification of the web application in its entirety may reduce the number of network connections from N to one, where N is the number of secondary resources. Accordingly, the illustrated method 30 may significantly improve performance as well as battery life. Indeed, such an approach may be particularly advantageous of all of the secondary resources do not reside on the same remote server.

FIG. 3B shows another method 42 of processing load requests on a mobile device in which block 44 may receive a load request from the mobile device with respect to a web application having a primary resource that references one or more secondary resources. As already noted, the load request might be associated with a user request, timer-based invocation, sensor-triggered invocation, and so forth. Illustrated block 46 loads a cached version of the primary resource into a browser of the mobile device in response to the load request, wherein block 48 may generate and transmit a background request based on the version identifier of the primary resource. The background request may include, for example, an XHR. For example, the background request might contain “appl.html?version=next_random_chars_AHDFK” to check for a new version of the primary resource.

A response to the background request may be received at block 50, wherein illustrated block 52 determines whether the primary resource and/or secondary resources are stale based on the response to the background request. If it is determined that one or more resources are stale, block 54 may update bookmarks to the stale resources and/or expire the stale resources. For example, a bookmark of the browser on the mobile device may be updated to reference a more recent version of the cached version of the primary resource (e.g., from app.html?version=1 to app.html?version=2) if the response to the background request indicates that a secondary resource is stale. Additionally, the cached version of the primary resource may be expired if the background request indicates that a secondary resource is stale so that the next time the bookmark is loaded, a fresh copy of the primary resource is downloaded.

Thus, the method 42 may present an old version of the web application to the user, wherein on the next start of the web application the new version will be loaded. The background request may therefore be transmitted over a single connection that enables staleness verification of the web application in its entirety. Such an approach may effectively reduce the number of network connections from one to zero and further improve performance and battery life.

Cloud Caching

If a pre-existing web application is not structured to include version identifiers in the primary resource and disable staleness checking in the secondary resources, substantial performance and battery life improvements may still be achieved via cloud caching. For example, FIG. 4 shows a method 56 of managing web applications on a cloud server in which illustrated block 58 identifies a web application having a primary resource that references one or more secondary resources. A shell resource that contains a version identifier of the primary resource and version identifiers of the one or more secondary resources may be automatically created at block 60.

FIG. 5 shows an example of an automatic conversion of a pre-existing web application 62 into a modified web application 64. In the illustrated example, the pre-existing web application 62 includes a primary resource 66 that references one or more secondary resources 68 (68 a-68 c), as already discussed. The illustrated pre-existing web application 62 does not contain, however, version identifiers in the primary resource 66 or disabled staleness checking in the secondary resources 68.

Accordingly, a shell resource 70 (e.g., “webapp.html”) may be automatically created, wherein the shell resource 70 contains a version identifier 72 (“Ver_(pr)”) of the primary resource 66 and version identifiers 74 (74 a-74 c) of the secondary resources 68, as already discussed. For example, a first version identifier 74 a (“Ver_(sr1)”) may correspond to the JAVASCRIPT secondary resource 68 a, a second version identifier 74 b (“Ver_(sr2)”) may correspond to the style sheet secondary resource 68 b, a third version identifier 74 c (“Ver_(sr3)”) may correspond to the image secondary resource 68 c, and so forth. The version identifier 72 may generally indicate the current version level of the primary resource 66 and the version identifiers 74 may generally indicate the current version level of the respective secondary resources 68. Staleness checking may also be effectively disabled in the secondary resources 68 by redirecting staleness checks (e.g., links associated with the secondary resources) to a cloud proxy. The illustrated conversion may be conducted by a cloud service and/or proxy that manages web applications on behalf of mobile devices and other client devices.

Returning now to FIG. 4, illustrated block 75 creates a cached version of the shell resource and a cached version of the one or more secondary resources on a cloud server. Additionally, block 76 may create a cache manifest for the web application. As already noted, the cache manifest may describe all resources of the web application and be used by the client devices and/or cloud server to determine whether to use cached or network copies of the resources. Table II below shows one example of such a manifest.

TABLE II webapp.html webapp.appcache version 1 webapp.appcache version 2 <html CACHE MANIFEST CACHE MANIFEST manifest=″webapp.appcache″ NETWORK: NETWORK: > webapp.html CACHE: <head> controller.js webapp.html <title>Version 1</title> view.css controller.js <meta http-equiv=″Content- image.png view.css Type″ content=″text/html; image.png charset=UTF-8″> <script type=″text/javascript″ src=″controller.js″ /> <style type=″text/css″ src=″view.css″ /> </head> <body>  <h1>Version 1</h1>  <img alt=″Image Resource″ src=″image.png″ /> </body> </html>

The version identifier of the primary resource and/or the version identifiers of the secondary resources may be used at block 78 to conduct a staleness check of the web application. Additionally, block 80 may provide for updating one or more of the cached version of the shell resource and the cached version of the one or more secondary resources based on the staleness check. Block 80 may also involve updating the cache manifest based on the staleness check.

Thus, if a subsequent load request is received from a mobile device with respect to the web application, the cloud server may return one or more of the primary resource and the secondary resources to the mobile device in response to the load request. In this regard, if it is determined that one or more of the secondary resources are not stale after a predetermined number of load requests, block 80 might indicate in the cache manifest that the secondary resources in question are to be cached on the mobile device for offline access (e.g., rightmost example of Table II).

FIG. 3 shows a networking architecture 82 in which a user equipment (UE) device 84 such as a mobile device accesses a web application 94 having a primary resource that references one or more secondary resources. In the illustrated example, a cloud server 86 manages the web application 94 on behalf of the UE device 84 as discussed with regard to the method 56 (FIG. 4) and the modified web application 64 (FIG. 5). The cloud server 86 may be centralized or distributed across a plurality of computing platforms and/or blades. The UE device 84 may generally access the web application 94 via the cloud server 64 rather than a web server 88 containing the most recent version of the web application 94. Accordingly, the cloud server 86 may communicate with the UE device 84 and the web server 88 via a network 90. The network 90 can itself include any suitable combination of servers, access points, routers, base stations, mobile switching centers, public switching telephone network (PSTN) components, etc., to facilitate communication between the UE device 84 and servers 86, 88.

In one example, the cloud server 86 includes logic 92 to identify the web application 94 and create a shell resource that contains a version identifier of the primary resource and version identifiers of the one or more secondary resources. The logic 92 may also disable staleness checking in the one or more secondary resources by redirecting links associated with the secondary resources to a cloud proxy, which may also run on the cloud server 86. In addition, the logic 92 may create a cached version of the shell resource and cached versions of the one or more secondary resources and create a cache manifest for the web application 94, wherein the UE device 84 and/or cloud server 86 may use the cache manifest to determine whether to access cached or network copies of the resources of the web application 94.

Thus, when the web application 94 is registered with the cloud server 86, a service may “crawl” the application 94—identifying all of the secondary/child resources. If, for example, a secondary resource has a URL (uniform resource locator) such as “***foo.com/style.css”, the service may rewrite the resource to “***cloud-proxy/style-v1.css” and store it in the proxy under that address. The process of crawling and rewriting the resources in a way that reduces the number of mobile connections may be considered the “cloud service” of the cloud server 86 and the process of serving the resources to the UE device 84 may be considered the “cloud proxy” of the cloud server 86.

The logic 92 may also use one or more of the version identifier of the primary resource and the version identifier of the secondary resource to conduct a staleness check of the web application 94, update one or more of the cached version of the shell resource and the cached version of the secondary resource based on the staleness check, and update the cache manifest based on the staleness check. Thus, if a load request is later received from the UE device 84 with respect to the web application 94, the cloud server 86 may return one or more of the primary resource and the secondary resources to the mobile device in response to the load request. In this regard, if it is determined that one or more of the secondary resources are not stale after a predetermined number of load requests, the cloud server 86 might indicate in the cache manifest that the secondary resources in question are to be cached on the UE device 84 for offline access.

Alternatively, if the web application 94 already contains a version identifier of the primary resource and version identifiers of the secondary resources, the UE device 84 may include logic 96 to identify the web application 94, create a cached version of the primary resource and cached versions of the secondary resources on the UE device 84, and use the version identifier of the primary resource to determine whether the secondary resource are stale, as already discussed with respect to the method 20 (FIG. 2), the method 30 (FIG. 3A) and/or the method 42 (FIG. 3B).

Techniques described herein may therefore reduce and/or eliminate any concerns over intermittent or no Internet access when accessing web applications. More particularly, the use of cloud caching and/or simplified client-side staleness checking may provide significant performance and/or battery life improvements over conventional solutions.

The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various embodiments of the present invention. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified logical function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions. In addition, the terms “first”, “second”, etc. may be used herein only to facilitate discussion, and carry no particular temporal or chronological significance unless otherwise indicated.

Those skilled in the art will appreciate from the foregoing description that the broad techniques of the embodiments of the present invention can be implemented in a variety of forms. Therefore, while the embodiments of this invention have been described in connection with particular examples thereof, the true scope of the embodiments of the invention should not be so limited since other modifications will become apparent to the skilled practitioner upon a study of the drawings, specification, and following claims. 

We claim:
 1. A computer implemented method comprising: identifying a web application having a primary resource that references a secondary resource; creating a shell resource that contains a version identifier of the primary resource and a version identifier of the secondary resource; creating a cached version of the shell resource and a cached version of the secondary resource on a cloud server; creating a cache manifest for the web application; using one or more of the version identifier of the primary resource and the version identifier of the secondary resource to conduct a staleness check of the web application; updating one or more of the cached version of the shell resource and the cached version of the secondary resource based on the staleness check; and updating the cache manifest based on the staleness check.
 2. The method of claim 1, further including disabling staleness checking in the secondary resource.
 3. The method of claim 2, wherein disabling staleness checking in the secondary resource includes redirecting a link associated with the secondary resource to a cloud proxy.
 4. The method of claim 1, wherein updating the cache manifest includes: determining that the secondary resource is not stale after a predetermined number of load requests; and indicating in the cache manifest that the secondary resource is to be cached on a client device for offline access.
 5. The method of claim 1, further including: receiving a load request from a client device with respect to the web application; and returning one or more of the primary resource and the secondary resource to the client device in response to the load request.
 6. The method of claim 5, wherein the staleness check is conducted prior to receiving the load request.
 7. A computer program product comprising: a computer readable storage medium; and computer usable code stored on the computer readable storage medium, where, if executed by a processor, the computer usable code causes a cloud server to: identify a web application having a primary resource that references a secondary resource; create a shell resource that contains a version identifier of the primary resource and a version identifier of the secondary resource; create a cached version of the shell resource and a cached version of the secondary resource on the cloud server; create a cache manifest for the web application; use one or more of the version identifier of the primary resource and the version identifier of the secondary resource to conduct a staleness check of the web application; update one or more of the cached version of the shell resource and the cached version of the secondary resource based on the staleness check; and update the cache manifest based on the staleness check.
 8. The computer program product of claim 7, wherein the computer usable code, if executed, causes a cloud server to disable staleness checking in the secondary resource.
 9. The computer program product of claim 8, wherein the computer usable code, if executed, causes a cloud server to redirect a link associated with the secondary resource to a cloud proxy to disable staleness checking in the secondary resource.
 10. The computer program product of claim 7, wherein the computer usable code, if executed, causes a cloud server to: determine that the secondary resource is not stale after a predetermined number of load requests; and indicate in the cache manifest that the secondary resource it to be cached on a client device for offline access.
 11. The computer program product of claim 7, wherein the computer usable code, if executed, causes a cloud server to: receive a load request from a client device with respect to the web application; and return one or more of the primary resource and the secondary resource to the client device in response to the load request.
 12. The computer program product of claim 11, wherein the staleness check is to be conducted prior to receiving the load request.
 13. A computer program product comprising: a computer readable storage medium; and computer usable code stored on the computer readable storage medium, where, if executed by a processor, the computer usable code causes a client device to: identify a web application having a primary resource that references a secondary resource, wherein the primary resource contains a version identifier of the primary resource and a version identifier of the secondary resource; create a cached version of the primary resource and a cached version of the secondary resource on the client device; and use the version identifier of the primary resource to determine whether the secondary resource is stale.
 14. The computer program product of claim 13, wherein the computer usable code, if executed, causes a client device to determine that staleness checking has been disabled in the secondary resource based on a max-age header of the secondary resource.
 15. The computer program product of claim 13, wherein the computer usable code, if executed, causes a mobile device to: receive a load request with respect to the web application; load the cached version of the primary resource into a browser in response to the load request; and generate a background request based on the version identifier of the primary resource, wherein a response to the background request is to indicate whether the secondary resource is stale.
 16. The computer program product of claim 15, wherein the computer usable code, if executed, causes a client device to update a bookmark of the browser to reference a more recent version of the cached version of the primary resource if the response to the background request indicates that the secondary resource is stale.
 17. The computer program product of claim 15, wherein the computer usable code, if executed, causes a client device to expire the cached version of the primary resource if the response to the background request indicates that the secondary resource is stale.
 18. The computer program product of claim 15, wherein the computer usable code, if executed, causes a client device to transmit the background request over a single connection that enables staleness verification of the web application in its entirety.
 19. The computer program product of claim 13, wherein the computer usable code, if executed, causes a client device to: receive a load request with respect to the web application; and generate a staleness request in response to the load request based on the version of the identifier of the primary resource.
 20. The computer program product of claim 13, wherein one or more of a cache manifest, a preload procedure and a hidden iframe is to be used to create the cached version of the secondary resource. 